//获取id值 
function $mj(id) {
    return document.getElementById(id);
}



//运动函数
function animate(elment, target) {//参数1移动的标签 参数2移动的距离，<及最终距离
    // 这里一上来要有一个先清理定时器
    clearInterval(elment.timeId)
    elment.timeId = setInterval(function () {
        //1，获取需要移动标签的当前位置
        var current = elment.offsetLeft;//offsetLeft获取位置

        //2，每次移动的步长
        var step = 10;

        //3，来一个判断
        // current表示当前距离
        // target表示最终距离
        // 当前距离小于最终距离时，移动整数，（直到移动到指定位置）反之当前距离{不}大于最终距离时，则执行负数
        step = current < target ? step : -step;
        //每次移动后的距离，写在判断条件之后
        current += step;
        if (Math.abs(target - current) > Math.abs(step)) {
            // Math.abs(target-current)最终距离减去当前距离的值
            //Math.abs(step) 每次10 上面的距离只要大于十就移动 执行下面代码
            elment.style.left = current + "px";//这里offsetLeft获得的是纯数值，需要加上像素单位

        } else {
            //  清理定时器，直接到达终点
            clearInterval(elment.timeId);
            //  小于十的时候执行下面的代码，直接到达终点
            elment.style.left = target + "px";
        }
    }, 10)
}

//事件对象的兼容代码 图片跟着鼠标走
var evt = {
    //window.event和事件对象e的兼容
    getEvent: function (evt) {
        return window.event || evt;
    },
    //可是区域横坐标的兼容代码
    getClientX: function (evt) {
        return this.getEvent(evt).clientX;
    },
    //可是区域纵坐标的兼容代码
    getClientY: function (evt) {
        return this.getEvent(evt).clientY;
    },
    //页面向左卷曲出去的横坐标
    getScrollLeft: function () {
        return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
    },
    //页面向上卷曲的纵坐标
    getScrollTop: function () {
        return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
    },
    //相对于页面的横坐标(pageX或者是clientX+scollLeft)
    getPageX: function (evt) {
        return this.getEvent(evt).pageX ? this.getEvent(evt).pageX : this.getClientX(evt) + this.getScrollLeft();
    },
    //相对于页面纵坐标(pageY或者是clientY+scrllTop)clientY<鼠标距离可是窗口的坐标scrllTop<向上卷曲的高度
    getPageY: function () {
        return this.getEvent(evt).pageY ? this.getEvent(evt).pageY : this.getClientY(evt) + this.getScrollTop();
    }
}

// 事件监听的兼容
// 参数1事件源，参数2事件类型，参数3执行的函数
function on(ele, type, fun) {
    //判断是否支持add的方法
    if (ele.addEventListener) {
        ele.addEventListener(type, fun);
    } else {
        //Ie8一下的兼容
        ele.attachEvent("on" + type, fun);
    }
};
//事件监听移出的兼容代码
function off(ele, type, fun) {
    if (ele.removeEventListener) {
        ele.removeEventListener(type, fun);
    } else {
        //IE8兼容
        ele.detacEvent("on" + type, fun)
    }
}

/*
 * 获取父级元素中的第一个子元素
 * @param element 父级元素
 * @returns {*} 父级元素中的子级元素
 */
function getFirstElement(element) {
    if (element.firstElementChild) {
        return element.firstElementChild;
    } else {
        var node = element.firstChild;
        while (node && node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}
//设定cookir
function setCookie(name, value, expires, path, domain) {
    var cookie_str = "";
    cookie_str += name + "=" + value;
    //表示不为空，有这个时间戳
    if (expires && typeof expires === "number") {
        //获取当前时间
        var d = new Date();
        //设置当前时间
        d.setDate(d.getDate() + expires);//expires传进来的天数
        //拼接对应的字符串
        cookie_str += ";expires=" + d;
    }
    //设置路径
    if (path && typeof path === "string") {
        // 拼接对应的字符串
        cookie_str += ";path" + path;
    }
    //设置domain localhost/127.0.0.1
    if (domain && typeof domain === "string") {
        //拼接对应的字符串
        cookie_str += ";domain" + domian;
    }
    console.log(cookie_str);

    document.cookie = cookie_str;
}
// 删除cookie;
// 让cookie在昨天过期,浏览器会立即回收cookie;
// setCookie("key" , "value" , -1 )
function removeCookie(name, path) {
    setCookie(name, null, -1, path)//namecookie名 null value  -1过期时间戳
}
//获取cookie
function getCookie(name) {
    //*分号后面有空格
    var cookie_array = document.cookie.split("; ");//删除掉分号和空格
    // 循环取出每一条cookie
    for (let i = 0; i < cookie_array.length; i++) {
        var cookie_item = cookie_array[i].split("=");//删除掉键值对之间的等号
        // 每一套cookie分成key和value;
        // 根据key 去获取value值;
        if (cookie_itme[0] === name) {
            return cookie_itme[1];
        }
    }
}
// ------------------全功能版aJax封装-------------------------------------->
// {
//     name:"莺歌";
//     age:"14"
// }
function ajax(url, type, data) {//参1：路径 参2：传参类型 参数3参数以对象的形式传进来key:value&key:value
    return new Promise(function (a) {//实例化对象首字母大写
        //创建发送工具
        var xhr = new XMLHttpRequest();
        //配置请求
        xhr.open(type, url);
        //post配置路径
        var send_string;
        if (type === "POST") {
            for (var attr in data) {
                //attr是可以 
                //date[attr]value
                send_string += "&" + attr + "=" + date[attr];
            }
            //post请求头
            xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        }
        //判断get或post传参
        send_string = type == "GET" ? null : send_string.slice(1);//&截取到 删除
        //发送请求
        xhr.send(send_string);
        //返回请求结果
        xhr.onreadystatechange = function () {
            if (xhr.status === 200 && xhr.readyState === 4) {
                a(console.log(xhr.responseText));
                a(xhr.responseText);
            }
        }
    })
}
// ajax("./json02.json","GET");
// ---------aJax封装----------------------------------------------------------------
//拼接路径
function dataTourl(Obj) {//Obj这里是一个对象{key:value,key2:value2}
    var url = "";
    for (let key in Obj) {
        //用+=是因为前面还有路劲需要拼接
        url += "&" + key + "=" + Obj[key];
    }
    // 作为返回值 返回出去
    return url.replace(/^&/, "?");//字符串替换，开头是&，替换成?
}
//发起ajax请求
function xhrGet(url, data) {//data是可选参数
    if (typeof data === "Object") {//判定date是否是对象
        url += dataTourl(Obj)
    }
    return new Promise(function (a) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url);
        xhr.send(null);
        xhr.onload = function () {
            if (xhr.status === 200) {//http请求成功的结果
                a(xhr.responseText);
                a(console.log(JSON.parse(xhr.responseText)));//需转换成字符串
            }
        }
    })
}
        // xhrGet("./json02.json")//发送成功了